From: Florian Müllner Date: Thu, 25 Jul 2019 10:50:26 +0000 (+0200) Subject: st: Move slow-down-factor into settings X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~839^2^2~89 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=12b8fb15b10fc74ad5b26d72008b2b89e80f0a70;p=gnome-shell.git st: Move slow-down-factor into settings Now that we have a Settings singleton, we have a better place for the slow-down-factor than an awkward extern variable. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/656 --- diff --git a/js/ui/environment.js b/js/ui/environment.js index 61524facd..ce0c875fe 100644 --- a/js/ui/environment.js +++ b/js/ui/environment.js @@ -107,6 +107,12 @@ function init() { } }); + St.set_slow_down_factor = function(factor) { + let { stack } = new Error(); + log(`St.set_slow_down_factor() is deprecated, use St.Settings.slow_down_factor\n${stack}`); + St.Settings.get().slow_down_factor = factor; + }; + let origToString = Object.prototype.toString; Object.prototype.toString = function() { let base = origToString.call(this); @@ -129,7 +135,7 @@ function init() { if (slowdownEnv) { let factor = parseFloat(slowdownEnv); if (!isNaN(factor) && factor > 0.0) - St.set_slow_down_factor(factor); + St.Settings.get().slow_down_factor = factor; } // OK, now things are initialized enough that we can import shell JS diff --git a/js/ui/lookingGlass.js b/js/ui/lookingGlass.js index ffd49364f..f33390d34 100644 --- a/js/ui/lookingGlass.js +++ b/js/ui/lookingGlass.js @@ -949,9 +949,10 @@ var LookingGlass = class LookingGlass { if (this._completionActor.visible) { this._completionActor.height = naturalHeight; } else { + let settings = St.Settings.get(); this._completionActor.show(); Tweener.removeTweens(this._completionActor); - Tweener.addTween(this._completionActor, { time: AUTO_COMPLETE_SHOW_COMPLETION_ANIMATION_DURATION / St.get_slow_down_factor(), + Tweener.addTween(this._completionActor, { time: AUTO_COMPLETE_SHOW_COMPLETION_ANIMATION_DURATION / settings.slow_down_factor, transition: 'easeOutQuad', height: naturalHeight, opacity: 255 @@ -961,8 +962,9 @@ var LookingGlass = class LookingGlass { _hideCompletions() { if (this._completionActor) { + let settings = St.Settings.get(); Tweener.removeTweens(this._completionActor); - Tweener.addTween(this._completionActor, { time: AUTO_COMPLETE_SHOW_COMPLETION_ANIMATION_DURATION / St.get_slow_down_factor(), + Tweener.addTween(this._completionActor, { time: AUTO_COMPLETE_SHOW_COMPLETION_ANIMATION_DURATION / settings.slow_down_factor, transition: 'easeOutQuad', height: 0, opacity: 0, @@ -1082,7 +1084,8 @@ var LookingGlass = class LookingGlass { // We inverse compensate for the slow-down so you can change the factor // through LookingGlass without long waits. - Tweener.addTween(this.actor, { time: 0.5 / St.get_slow_down_factor(), + let settings = St.Settings.get(); + Tweener.addTween(this.actor, { time: 0.5 / settings.slow_down_factor, transition: 'easeOutQuad', y: this._targetY }); @@ -1101,7 +1104,8 @@ var LookingGlass = class LookingGlass { Main.popModal(this._entry); - Tweener.addTween(this.actor, { time: Math.min(0.5 / St.get_slow_down_factor(), 0.5), + let settings = St.Settings.get(); + Tweener.addTween(this.actor, { time: Math.min(0.5 / settings.slow_down_factor, 0.5), transition: 'easeOutQuad', y: this._hiddenY, onComplete: () => { diff --git a/js/ui/tweener.js b/js/ui/tweener.js index 28a96fd8b..d9fab4f6a 100644 --- a/js/ui/tweener.js +++ b/js/ui/tweener.js @@ -211,8 +211,9 @@ var ClutterFrameTicker = class { } start() { - if (St.get_slow_down_factor() > 0) - Tweener.setTimeScale(1 / St.get_slow_down_factor()); + let settings = St.Settings.get(); + if (settings.slow_down_factor > 0) + Tweener.setTimeScale(1 / settings.slow_down_factor); this._timeline.start(); global.begin_work(); } diff --git a/src/st/st-scroll-bar.c b/src/st/st-scroll-bar.c index 9c55e5488..9d0ca819f 100644 --- a/src/st/st-scroll-bar.c +++ b/src/st/st-scroll-bar.c @@ -40,6 +40,7 @@ #include "st-enum-types.h" #include "st-private.h" #include "st-button.h" +#include "st-settings.h" #define PAGING_INITIAL_REPEAT_TIMEOUT 500 #define PAGING_SUBSEQUENT_REPEAT_TIMEOUT 200 @@ -96,8 +97,6 @@ enum static guint signals[LAST_SIGNAL] = { 0, }; -extern gfloat st_slow_down_factor; - static gboolean handle_button_press_event_cb (ClutterActor *actor, ClutterButtonEvent *event, @@ -683,9 +682,11 @@ static gboolean trough_paging_cb (StScrollBar *self) { StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (self); + StSettings *settings; gfloat handle_pos, event_pos, tx, ty; gdouble value, new_value; gdouble page_increment; + gdouble slow_down_factor; gboolean ret; gulong mode; @@ -776,13 +777,16 @@ trough_paging_cb (StScrollBar *self) clutter_timeline_stop (CLUTTER_TIMELINE (priv->paging_animation)); } + settings = st_settings_get (); + g_object_get (settings, "slow-down-factor", &slow_down_factor, NULL); + /* FIXME: Creating a new transition for each scroll is probably not the best * idea, but it's a lot less involved than extending the current animation */ priv->paging_animation = g_object_new (CLUTTER_TYPE_PROPERTY_TRANSITION, "animatable", priv->adjustment, "property-name", "value", "interval", clutter_interval_new (G_TYPE_DOUBLE, value, new_value), - "duration", (guint)(PAGING_SUBSEQUENT_REPEAT_TIMEOUT * st_slow_down_factor), + "duration", (guint)(PAGING_SUBSEQUENT_REPEAT_TIMEOUT * slow_down_factor), "progress-mode", mode, NULL); g_signal_connect (priv->paging_animation, "stopped", diff --git a/src/st/st-settings.c b/src/st/st-settings.c index a90e9f1b1..66f390873 100644 --- a/src/st/st-settings.c +++ b/src/st/st-settings.c @@ -21,6 +21,7 @@ #include "config.h" #endif +#include #include #include "st-private.h" @@ -41,6 +42,7 @@ enum { PROP_GTK_THEME, PROP_GTK_ICON_THEME, PROP_MAGNIFIER_ACTIVE, + PROP_SLOW_DOWN_FACTOR, N_PROPS }; @@ -59,10 +61,24 @@ struct _StSettings gboolean primary_paste; gboolean magnifier_active; gint drag_threshold; + double slow_down_factor; }; G_DEFINE_TYPE (StSettings, st_settings, G_TYPE_OBJECT) +#define EPSILON (1e-10) + +static void +st_settings_set_slow_down_factor (StSettings *settings, + double factor) +{ + if (fabs (settings->slow_down_factor - factor) < EPSILON) + return; + + settings->slow_down_factor = factor; + g_object_notify_by_pspec (G_OBJECT (settings), props[PROP_SLOW_DOWN_FACTOR]); +} + static void st_settings_finalize (GObject *object) { @@ -82,7 +98,16 @@ st_settings_set_property (GObject *object, const GValue *value, GParamSpec *pspec) { - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + StSettings *settings = ST_SETTINGS (object); + + switch (prop_id) + { + case PROP_SLOW_DOWN_FACTOR: + st_settings_set_slow_down_factor (settings, g_value_get_double (value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } } static void @@ -113,6 +138,9 @@ st_settings_get_property (GObject *object, case PROP_MAGNIFIER_ACTIVE: g_value_set_boolean (value, settings->magnifier_active); break; + case PROP_SLOW_DOWN_FACTOR: + g_value_set_double (value, settings->slow_down_factor); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } @@ -157,6 +185,11 @@ st_settings_class_init (StSettingsClass *klass) "Weather the a11y magnifier is active", FALSE, ST_PARAM_READABLE); + props[PROP_SLOW_DOWN_FACTOR] = g_param_spec_double("slow-down-factor", + "Slow down factor", + "Factor applied to all animation durations", + EPSILON, G_MAXDOUBLE, 1.0, + ST_PARAM_READWRITE); g_object_class_install_properties (object_class, N_PROPS, props); } @@ -242,6 +275,7 @@ st_settings_init (StSettings *settings) KEY_DRAG_THRESHOLD); settings->magnifier_active = g_settings_get_boolean (settings->a11y_settings, KEY_MAGNIFIER_ACTIVE); + settings->slow_down_factor = 1.; } /** diff --git a/src/st/st-theme-node.c b/src/st/st-theme-node.c index 8e910f831..1261e9257 100644 --- a/src/st/st-theme-node.c +++ b/src/st/st-theme-node.c @@ -26,6 +26,7 @@ #include #include +#include "st-settings.h" #include "st-theme-private.h" #include "st-theme-context.h" #include "st-theme-node-private.h" @@ -39,8 +40,6 @@ static const ClutterColor DEFAULT_SUCCESS_COLOR = { 0x4e, 0x9a, 0x06, 0xff }; static const ClutterColor DEFAULT_WARNING_COLOR = { 0xf5, 0x79, 0x3e, 0xff }; static const ClutterColor DEFAULT_ERROR_COLOR = { 0xcc, 0x00, 0x00, 0xff }; -extern gfloat st_slow_down_factor; - G_DEFINE_TYPE (StThemeNode, st_theme_node, G_TYPE_OBJECT) static void @@ -2348,18 +2347,23 @@ st_theme_node_get_margin (StThemeNode *node, int st_theme_node_get_transition_duration (StThemeNode *node) { + StSettings *settings; gdouble value = 0.0; + gdouble factor; g_return_val_if_fail (ST_IS_THEME_NODE (node), 0); + settings = st_settings_get (); + g_object_get (settings, "slow-down-factor", &factor, NULL); + if (node->transition_duration > -1) - return st_slow_down_factor * node->transition_duration; + return factor * node->transition_duration; st_theme_node_lookup_time (node, "transition-duration", FALSE, &value); node->transition_duration = (int)value; - return st_slow_down_factor * node->transition_duration; + return factor * node->transition_duration; } StIconStyle diff --git a/src/st/st-widget.c b/src/st/st-widget.c index 5fa676dca..1f7b99d23 100644 --- a/src/st/st-widget.c +++ b/src/st/st-widget.c @@ -133,8 +133,6 @@ enum static guint signals[LAST_SIGNAL] = { 0, }; -gfloat st_slow_down_factor = 1.0; - G_DEFINE_TYPE_WITH_PRIVATE (StWidget, st_widget, CLUTTER_TYPE_ACTOR); #define ST_WIDGET_PRIVATE(w) ((StWidgetPrivate *)st_widget_get_instance_private (w)) @@ -2449,30 +2447,6 @@ st_describe_actor (ClutterActor *actor) return g_string_free (desc, FALSE); } -/** - * st_set_slow_down_factor: - * @factor: new slow-down factor - * - * Set a global factor applied to all animation durations - */ -void -st_set_slow_down_factor (gfloat factor) -{ - st_slow_down_factor = factor; -} - -/** - * st_get_slow_down_factor: - * - * Returns: the global factor applied to all animation durations - */ -gfloat -st_get_slow_down_factor (void) -{ - return st_slow_down_factor; -} - - /** * st_widget_get_label_actor: * @widget: a #StWidget diff --git a/src/st/st-widget.h b/src/st/st-widget.h index 7c76c5136..d6e3ca2bf 100644 --- a/src/st/st-widget.h +++ b/src/st/st-widget.h @@ -143,8 +143,6 @@ gboolean st_widget_get_resource_scale (StWidget *widg /* debug methods */ char *st_describe_actor (ClutterActor *actor); -void st_set_slow_down_factor (gfloat factor); -gfloat st_get_slow_down_factor (void); /* accessibility methods */ void st_widget_set_accessible_role (StWidget *widget,